/*
 * @Author: WJC
 * @Date: 2018-11-23 10:26:04 
 * @Last Modified by: WJC
 * @Last Modified time: 2018-12-03 13:32:50
 */

// 声明全局变量
var regInoInput; // "挂号发票号"输入框
var caseNoInput; // "病例号"输入框
var pidInput; // "身份证号"输入框
var pnameInput; // "姓名"输入框
var sexInput; // "性别"输入框
var ageInput; // "年龄"输入框
var birthdayInput; // "出生日期"
var addressInput; // "地址"输入框
var vistDateInput; // "看诊日期"输入框
var drlevelSelect; // "号别"下拉列表
var deptSelect; // "挂号科室"下拉列表
var drnameSelect; // "看诊医生"下拉列表
var regPayInput; // "应收金额"输入框
var settleTypeSelect; // "结算类别"下拉列表
var mcardNoInput; // "医疗证号"输入框
var medicalTypeSelect; // "医疗类别"下拉框
var ageUnitSelect; // 年、月、日选择项
var checkArr = [false, false, false, false, false, false, false, false, false, false]; // 存放必须检测的表单元素结果

/**
 * 获取全局变量
 */
function getGlobalVariable() {
  regInoInput = $('input[name="reg_ino"]');
  caseNoInput = $('input[name="case_no"]');
  pidInput = $('input[name="pid"]');
  pnameInput = $('input[name="pname"]');
  sexInput = $('select[name="sex"]');
  ageInput = $('input[name="age"]');
  birthdayInput = $('input[name="birthday"]');
  addressInput = $('input[name="address"]');
  vistDateInput = $('input[name="vist_date"]');
  drlevelSelect = $('select[name="drlevel"]');
  deptSelect = $('select[name="department"]');
  drnameSelect = $('select[name="drname"]');
  regPayInput = $('input[name="reg_pay"]');
  settleTypeSelect = $('select[name="settle_type"]');
  mcardNoInput = $('input[name="mcard_no"]');
  medicalTypeSelect = $('select[name="medical_type"]');
  ageUnitSelect = $('select[name="age_unit"]');

}

/**
 * 将不足10位的数值，转换为长度为10的字符串
 * @param {number} num 
 */
function getTenStr(num) {
  // 将num转换成字符串，根据字符串长度获得正确的数值位数
  var str = num + "";
  var len = str.length;
  // 根据字符串长度进行位数补全，补全到10位，不足位添0
  if (len < 10) {
    for (var i = 0; i < 10 - len; i++) {
      str = "0" + str;
    }
  }
  return str;
}

/**
 * 传入name为pid的input输入值，通过该输入值获取服务器端的对应身份证信息
 * @param {string} pidValue
 */
function queryIdCardInfoByPid(pidValue) {
  // 当pid的值为空字符串时不执行函数
  if (pidValue === "") {
    return;
  }

  // 通过AJAX获得数据
  $.ajax({
    url: "getIdCardInfo.do",
    type: "post",
    async: true,
    data: {
      pid: pidValue
    },
    dataType: "text",
    error: function () {
      alert("身份证号的ajax请求失败");
    },
    success: function (data) {
      // num的值为-1时，表示数据库中该记录不存在
      var num = parseInt(data);
      if (num !== -1) {
        var json = eval("(" + data + ")"); // string->json
        pnameInput.val(json.pname); // 添加"姓名"
        sexInput.val(parseInt(json.sex)); // 添加"性别"
        birthdayInput.val(json.birthday); // 添加"出生日期"
        getAgeByBirthday(); // 取得相应年龄

        if (json.address !== "null" && json.address !== "") {
          // 在地址存在时，向"地址"输入框添加值;
          addressInput.val(json.address);
        } else {
          // 在地址不存在时，向"地址"输入框添加空字符串，消除上一次记录残留
          addressInput.val("");
        }

      } else {
        // 消除上一次残留记录
        pnameInput.val("");
        sexInput.val(0);
        birthdayInput.val("");
        addressInput.val("");
        ageInput.val("");

      }
    }
  });
}

/**
 * 获得当前可用的最新挂号发票号，并为"挂号发票号"输入框的value属性赋值
 */
function getRegIno() {
  // 通过AJAX获得数据
  $.ajax({
    url: "getRequiredRegIno.do",
    type: "post",
    async: true,
    error: function () {
      alert("挂号发票号的ajax请求失败");
    },
    success: function (data) {
      // 1、将获得的data数据转换成数值类型num
      var num = parseInt(data);
      // 2、如果num的值为-1，表示发票号超出范围，弹出警告，并结束函数
      if (num === -1) {
        alert("挂号发票号溢出，请联系技术人员");
        return;
      }
      // 3、将不足10位的数值，转换为长度为10的字符串
      var str = getTenStr(num);

      // 为"挂号发票号"输入框的value属性赋值
      regInoInput.val(str);
    }
  });
}

/**
 * 获得当前可用的最新病例号，并为"病例号"输入框的value属性赋值
 */
function getCaseNo() {
  // 通过AJAX获得数据
  $.ajax({
    url: "getRequiredCaseNo.do",
    type: "post",
    async: true,
    error: function () {
      alert("病历号的ajax请求失败");
    },
    success: function (data) {
      // 1、将获得的data数据转换成数值类型num
      var num = parseInt(data);
      // 2、如果num的值为-1，表示发票号超出范围，弹出警告，并结束函数
      if (num === -1) {
        alert("病例号溢出，请联系技术人员");
        return;
      }
      // 3、将不足10位的数值，转换为长度为10的字符串
      var str = getTenStr(num);
      // 为"挂号发票号"输入框的value属性赋值
      caseNoInput.val(str);
    }
  });
}

/**
 * 获得当前时间，并为"看诊日期"输入框的value属性赋值
 */
function getNowTime() {
  // 获得当期时间
  var d = new Date();
  var _year = d.getFullYear(d); // 年份
  var _month = d.getMonth(d) + 1; // 月份
  var _date = d.getDate(d); // 当月天数
  // 格式化时间"yyyy-MM-dd"
  var str = _year + "-" + _month + "-" + _date;
  // 为"看诊日期"输入框的value属性赋值
  vistDateInput.val(str);
}

/**
 * 通过AJAX获得来自服务器的"科室表"JSON，根据该JSON创建下拉列表项
 */
function createDeptOption() {
  // 通过AJAX获得数据
  $.ajax({
    type: "post",
    url: "getAllDepartment.do",
    async: true,
    dataType: "text",
    error: function () {
      alert("科室列表的ajax请求失败");
    },
    success: function (data) {
      // num的值为-1时，表示数据库中记录不存在
      var num = parseInt(data);
      if (num != -1) {
        var json = eval("(" + data + ")"); // string->json
        var deptArr = json.dept; // json对象的dept属性

        for (var i = 0; i < deptArr.length; i++) {
          var arr = deptArr[i];
          deptSelect.append(
            '<option value="' + arr[0] + '">' + arr[1] + "</option>"
          );
        }
      } else {
        alert("科室表未录入信息，请及时添加");
      }
    }
  });
}

/**
 * 根据选择的"号别"和"挂号科室"，生成相应科室中的"看诊医生"列表项
 */
function createDrnameOption() {
  // 获得当前"挂号科室"的编号
  var deptno = deptSelect.val();
  // 获得当前"号别"的选择
  var level = drlevelSelect.val();
  // 清除原有"看诊医生"的下拉列表
  drnameSelect.empty();
  // 添加默认空白选项
  drnameSelect.append('<option value="0"></option>');
  // 如果"挂号科室"的编号是"0"，则退出函数
  if (deptno === "0") {
    return;
  }
  // 通过AJAX获得数据
  $.ajax({
    type: "post",
    url: "getDoctorInfoByDrlevelAndDeptno.do",
    async: true,
    data: {
      drlevel: level,
      deptno: deptno
    },
    dataType: "text",
    error: function () {
      alert("看诊医生列表的ajax请求失败");
    },
    success: function (data) {
      // num的值为-1时，表示数据库中记录不存在
      var num = parseInt(data);
      if (num != -1) {
        var json = eval("(" + data + ")"); // string->json
        var doctorArr = json.doctor; // json对象的doctor属性

        for (var i = 0; i < doctorArr.length; i++) {
          var arr = doctorArr[i];
          drnameSelect.append(
            '<option value="' + arr[0] + '">' + arr[1] + "</option>"
          );
        }
      } else {
        alert("医生表未录入信息，请及时添加");
      }
    }
  });
}

/**
 * 当"号别"下拉列表改变时，相应改变"应收金额"输入框的内容
 * "普通"：2元，"专家"：10元
 */
function getRegPay() {
  // 随"号别"改变"应收金额"
  switch (drlevelSelect.val()) {
    case "1":
      regPayInput.val(2);
      break;
    case "2":
      regPayInput.val(10);
      break;
  }
}

/**
 * 根据"出生日期"获得相应的"年龄"
 */
function getAgeByBirthday() {
  // 获得"出生日期"输入框的值，格式为"yyyy-MM-dd"
  var birth = birthdayInput.val();
  // 对获得的"出生日期"字符串进行拆分，得到年、月、日的字符串
  var _year = birth.substring(0, birth.indexOf("-"));
  var _month = birth.substring(birth.indexOf("-") + 1, birth.lastIndexOf("-"));
  var _date = birth.substring(birth.lastIndexOf("-") + 1, birth.length);
  // 将年、月、日的字符串转换为相应的数值
  var y = parseInt(_year);
  var m = parseInt(_month) - 1;
  var d = parseInt(_date);
  // 获得"出生日期"的时间戳
  var birthTime = new Date(y, m, d).getTime();
  // 获得当前时间的时间戳
  var nowTime = new Date().getTime();
  // 计算出相差的时间
  var c = nowTime - birthTime;

  var age = Math.floor(c / (365 * 24 * 60 * 60 * 1000));
  if (age < 1) {
    age = Math.floor(c / (30 * 24 * 60 * 60 * 1000));
    ageUnitSelect.val("2");
    if (age < 1) {
      age = Math.floor(c / (24 * 60 * 60 * 1000));
      ageUnitSelect.val("3");
    }
  }
  // 为"年龄"输入框赋值
  ageInput.val(age);

  console.log(_year + "、" + _month + "、" + _date);
}

/**
 * 表单验证工具对象
 */
var checkUtil = {
  // 未输入检测
  checkNoInput: function (obj) {
    // 直接传入表单控件时，获取控件内容
    if (typeof obj !== "string") {
      obj = obj.val();
    }

    if (obj === "" || obj === null || obj === undefined) {
      // 没有有输入内容
      //alert("未输入");
      return false;
    }
    return true;
  },

  // 输入长度检测
  checkLength: function (obj, len) {
    // 直接传入表单控件时，获取控件内容
    if (typeof obj !== "string") {
      obj = obj.val();
    }

    if (obj.length !== len) {
      // 字符串不是10位
      //alert("输入长度不是" + len + "位");
      return false;
    }
    return true;
  },

  // 数字格式检测
  checkNumber: function (obj, len) {
    // 直接传入表单控件时，获取控件内容
    if (typeof obj !== "string") {
      obj = obj.val();
    }

    // 发票号的正则表达式
    var s = "^\\d{" + len + "}$";
    var format = new RegExp(s);

    // 根据正则表达式判断输入发票号是否正确
    if (!format.test(obj)) {
      //alert("输入格式不正确");
      return false;
    }
    return true;
  },

  // 日期格式检测
  checkDateFormat: function (obj) {
    // 直接传入表单控件时，获取控件内容
    if (typeof obj !== "string") {
      obj = obj.val();
    }

    // 日期的正则表达式
    var format = /^((19|20)\d\d)-(0?[1-9]|1[012])-(0?[1-9]|[12][0-9]|3[01])$/;

    // 根据正则表达式判断输入日期格式是否正确
    if (!format.test(obj)) {
      //alert("日期格式不正确，格式“yyyy-MM-dd");
      return false;
    }
    return true;
  },

  // 身份证号格式检测
  checkIDCardFormat: function (obj) {
    // 直接传入表单控件时，获取控件内容
    if (typeof obj !== "string") {
      obj = obj.val();
    }

    // 身份证号位数检测
    var len = obj.length;
    if (len !== 15 && len !== 18) {
      //alert("身份证号位数不正确");
      return false;
    }

    // 身份证号的正则表达式
    var format15 = /^[1-9]\d{5}\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{2}$/;
    var format18 = /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/;

    // 根据正则表达式判断输入身份证号格式是否正确
    switch (len) {
      case 15:
        // 15位身份证号检测
        if (!format15.test(obj)) {
          //alert("身份证号格式不正确");
          return false;
        }
        break;

      case 18:
        // 18位身份证号检测
        if (!format18.test(obj)) {
          //alert("身份证号格式不正确");
          return false;
        }
        break;
    }
    return true;
  },

  // 下拉列表检测
  checkSelect: function (obj) {
    // 直接传入表单控件时，获取控件内容
    if (typeof obj !== "string") {
      obj = obj.val();
    }

    if (obj === "0" || obj === "" || obj === null || obj === undefined) {
      //alert("没有选择选项");
      return false;
    }
    return true;
  }
};

/**
 * 验证输入信息，输入信息无误时，向服务器端发送表单信息
 */
function sendRegisterInfo() {
  // 遍历form元素下的所有表单元素
  //var elems = $(".register_btn").parent().children();
  var elems = $('.check_required');
  for (var i = 0; i < elems.length; i++) {
    $(elems.get(i)).blur(); // 每个必填元素过滤一遍
  }

  // 遍历检测结果数组，全通过往下执行;
  // 有一个不通过退出函数。
  for (var i = 0; i < checkArr.length; i++) {
    if (checkArr[i] !== true) {
      alert("验证不通过，无法提交");
      return;
    }
  }

  // 如果医疗证号有输入，则检测输入结果
  if (mcardNoInput.val() != "" && !checkUtil.checkNumber(mcardNoInput, 5)) {
    alert("医疗证号验证不通过，无法提交");
    return;
  }

  // 通过客户端检测，发送数据，并更新表格显示
  $.ajax({
    type: "post",
    url: "register.do",
    async: true,
    data: {
      reg_ino: regInoInput.val(),
      pid: pidInput.val(),
      case_no: caseNoInput.val(),
      pname: pnameInput.val(),
      sex: sexInput.val(),
      birthday: birthdayInput.val(),
      settle_type: settleTypeSelect.val(),
      mcard_no: mcardNoInput.val(),
      medical_type: medicalTypeSelect.val(),
      address: addressInput.val(),
      vist_date: vistDateInput.val(),
      department: deptSelect.val(),
      drname: drnameSelect.val(),
      reg_pay: regPayInput.val(),
      reg_src: $('select[name="reg_src"]').val()
    },
    dataType: "text",
    error: function () {
      alert("挂号的ajax请求失败");
    },
    success: function (data) {
      var json = eval("(" + data + ")"); // string->json

      if (json.regInoFlag && json.caseNoFlag) {
        alert("请重新填写发票号和病历号");
      } else if (json.regInoFlag) {
        alert("请重新填写发票号");
      } else if (json.caseNoFlag) {
        alert("请重新填写病例号");
      } else {
        addTrIntoTable(caseNoInput.val(), pnameInput.val(), sexInput.val(), birthdayInput.val(), pidInput.val(), regInoInput.val(), settleTypeSelect.val(), drlevelSelect.val(), vistDateInput.val(), 1, 1, regPayInput.val(), deptSelect.val());
        getRegIno(); // 刷新发票号
        getCaseNo(); // 刷新病历号
        alert("挂号成功");
      }
    }
  });
}

/**
 * 输入检测样式
 */
function checkStyle(obj, flag) {
  if (flag) {
    $(obj).css("border", "1px solid rgb(169, 169, 169)");
  } else {
    $(obj).css("border", "1px solid red");
  }
}

/**
 * 按下回车键聚焦到下一个元素
 */
// function theNextElementGetFocus(currentObj, nextObj) {
//   currentObj.keyup(function (e) {
//     e.preventDefault();
//     var eCode = e.keyCode ? e.keyCode : e.which ? e.which : e.charCode;
//     // 回车键的keyCode为13，按下回车后执行函数
//     if (eCode === 13) {
//       nextObj.focus();
//     }
//   });
// }

/**
 * 绑定事件
 */
function bindEvent() {
  /** "挂号发票号"输入框绑定事件 */
  regInoInput.blur(function () {
    // "挂号发票号"检测
    checkArr[0] = checkUtil.checkNumber($(this), 10);

    checkStyle(this, checkArr[0]);
  });
  regInoInput.focus(function () {
    // 使用焦点事件，当"挂号发票号"输入框获得焦点时，更新"挂号发票号"内容
    //getRegIno();
  });


  /** "身份证号"输入框绑定事件 */
  pidInput.keyup(function (e) {
    var eCode = e.keyCode ? e.keyCode : e.which ? e.which : e.charCode;
    // 回车键的keyCode为13，按下回车后执行函数
    if (eCode === 13) {
      queryIdCardInfoByPid(this.value);
      caseNoInput.focus();
    }
  });
  pidInput.blur(function () {
    // "身份证号"检测
    checkArr[1] = checkUtil.checkIDCardFormat($(this));

    checkStyle(this, checkArr[1]);

    if (checkArr[1]) {
      pidInput.val($(this).val()); // 第二个"身份证号"输入框 
    }
  });


  /**"病例号"输入框绑定事件 */
  caseNoInput.blur(function () {
    // "病例号"检测
    checkArr[2] = checkUtil.checkNumber($(this), 10);

    checkStyle(this, checkArr[2]);
  });
  caseNoInput.focus(function () {
    // 使用焦点事件，当"病例号"输入框获得焦点时，更新"病历号"内容
    getCaseNo();
  });


  /**"姓名"输入框绑定事件 */
  pnameInput.blur(function () {
    // "姓名"检测
    checkArr[3] = checkUtil.checkNoInput($(this));

    checkStyle(this, checkArr[3]);
  });


  /**"性别"下拉框绑定事件 */
  sexInput.blur(function () {
    // "性别"检测
    checkArr[4] = checkUtil.checkSelect($(this));

    checkStyle(this, checkArr[4]);
  });


  /**"年龄"输入框绑定事件 */
  ageInput.blur(function () {
    // "年龄"检测
    if (!(/^\d{1,3}$/).test($(this).val())) {
      //alert("输入不正确");
      checkStyle(this, false);
    } else {
      checkStyle(this, true);
    }
  });


  /**"出生日期"输入框绑定事件 */
  birthdayInput.blur(function () {
    // "出生日期"检测
    checkArr[5] = checkUtil.checkDateFormat($(this));

    checkStyle(this, checkArr[5]);
  });
  birthdayInput.change(function () {
    // "出生日期"改变"年龄""
    getAgeByBirthday();
  });


  /**"结算类别"下拉框绑定事件 */
  settleTypeSelect.blur(function () {
    // "结算类别"检测
    checkArr[6] = checkUtil.checkSelect($(this));

    checkStyle(this, checkArr[6]);
  });


  /**"医疗证号"输入框绑定事件 */
  mcardNoInput.blur(function () {
    // "医疗证号"检测
    var flag = checkUtil.checkNumber($(this), 5);

    checkStyle(this, flag);
  });


  /**"看诊日期"输入框绑定事件 */
  vistDateInput.blur(function () {
    // "看诊日期"检测
    checkArr[7] = checkUtil.checkDateFormat($(this));

    checkStyle(this, checkArr[7]);
  });


  /**"号别"下拉列表的绑定事件 */
  drlevelSelect.change(function () {
    // 防止在科室选项没有选择或未生成时，显示"医生表未录入信息，请及时添加"提示
    if (deptSelect.val() !== "0" && deptSelect.val() !== null) {
      // 动态生成医生选项
      createDrnameOption();
    }
    // 动态改变"应收金额"输入框的内容
    getRegPay();
  });


  /**"挂号科室"下拉列表的绑定事件 */
  deptSelect.change(function () {
    // 动态生成医生选项
    createDrnameOption();
  });
  deptSelect.blur(function () {
    // "挂号科室"检测
    checkArr[8] = checkUtil.checkSelect($(this));

    checkStyle(this, checkArr[8]);
  });


  /**"看诊医生"下拉框的绑定事件 */
  drnameSelect.blur(function () {
    // "看诊医生"检测
    checkArr[9] = checkUtil.checkSelect($(this));

    checkStyle(this, checkArr[9]);
  });


  // "挂号"按钮的绑定事件
  $('.register_btn').click(function () {
    sendRegisterInfo();

    //alert(checkArr);
    //addTrIntoTable(regInoInput.val(), pnameInput.val(), sexInput.val(), birthdayInput.val(), pidInput.val(), regInoInput.val(), settleTypeSelect.val(), drlevelSelect.val(), vistDateInput.val(), 1, 1, regPayInput.val(), deptSelect.val());

  });

  // "刷新"按钮的绑定事件
  $('.refresh_btn').click(function () {
    refreshTrOfChecked();
  });

  // "更新发票号"按钮的绑定事件
  $('.refresh_ino').click(function () {
    getRegIno();
  });

  // "清屏"按钮的绑定事件
  $('.clear_form').click(function () {
    pidInput.val("");
    pnameInput.val("");
    sexInput.val("0");
    ageInput.val("");
    ageUnitSelect.val("1");
    birthdayInput.val("");
    settleTypeSelect.val("0");
    mcardNoInput.val("");
    medicalTypeSelect.val("0");
    addressInput.val("");
    vistDateInput.val("");
    drlevelSelect.val("1");
    deptSelect.val("0");
    drnameSelect.val("0");
    regPayInput.val("2");
    $("#guahaoxinxi input, #guahaoxinxi select").css("border", "1px solid rgb(169, 169, 169)");
  });

  // 上一页
  $(".prev a").click(function () {
    var page = parseInt($(".pagenum").html()); // 当前页数

    if (page != 1) {
      $(".next").removeClass("disabled");
      pageFuntion(page - 1);
      $(".pagenum").html(page - 1);
    } else {
      $(".prev").addClass("disabled");
    }
    return false;
  });

  // 下一页
  $(".next a").click(function () {
    var page = parseInt($(".pagenum").html()); // 当前页数
    var maxpage = parseInt($(".maxpage").html()); // 最大页数

    if (page != maxpage) {
      $(".prev").removeClass("disabled");
      pageFuntion(page + 1);
      $(".pagenum").html(page + 1);
    } else {
      $(".next").addClass("disabled");
    }
    return false;
  });
}

/**
 * 向挂号显示表格中添加一行，只显示添加的8行
 */
function addTrIntoTable(case_no, pname, sex, birthday, pid, reg_ino, settle_type, drlevel, vist_date, diag_status, reg_status, reg_pay, department) {
  var d = new Date(); // 获得当期日期 
  var now_date = d.getFullYear() + "-" + (d.getMonth() + 1) + "-" + d.getDate(); // 将日期变为"yyyy-MM-dd"型字符串

  if ($('tbody tr').length === 8) {
    // 当添加到第11行时，删除最先添加的行
    $('tr').remove('tbody tr:last-child');
  }

  // 新添加的行，作为第一行
  console.log(drlevel);
  console.log(diag_status);

  $('tbody').prepend(
    '<tr><td><input type="radio" name="refresh_tr" /></td><td>' + case_no +
    '</td><td>' + pname + '</td><td>' + (sex == "1" ? "男" : "女") +
    '</td><td>' + birthday + '</td><td>' + pid + '</td><td class="reg_ino">' + reg_ino +
    '</td><td>' + (settle_type == 1 ? "自费" : settle_type) + '</td><td>' +
    (drlevel == 1 ? "普通" : (drlevel == 2 ? "专家" : drlevel)) + '</td><td>' + now_date +
    '</td><td>' + vist_date + '</td><td class="diag_status">' + (diag_status == "1" ? "否" : "是") +
    '</td><td class="reg_status">' + (reg_status == "1" ? "正常" : "已退号") +
    '</td><td>' + reg_pay + '</td><td>' + $(deptSelect.children().get(deptSelect.val())).text() + '</td></tr>'
  );
}
/**
 * 分页调用的添加表格函数
 */
function addTrIntoTableDesc(case_no, pname, sex, birthday, pid, reg_ino, settle_type, drlevel, reg_date, vist_date, diag_status, reg_status, reg_pay, department) {
  if ($('tbody tr').length === 10) {
    // 当添加到第11行时，删除最先添加的行
    $('tr').remove('tbody tr:last-child');
  }

  // 新添加的行，作为第一行
  $('tbody').append(
    '<tr><td><input type="radio" name="refresh_tr" /></td><td>' + getTenStr(case_no) +
    '</td><td>' + pname + '</td><td>' + (sex == "1" ? "男" : "女") +
    '</td><td>' + birthday + '</td><td>' + pid + '</td><td class="reg_ino">' + getTenStr(reg_ino) +
    '</td><td>' + settle_type + '</td><td>' + drlevel + '</td><td>' + reg_date +
    '</td><td>' + vist_date + '</td><td class="diag_status">' + (diag_status == "1" ? "否" : "是") +
    '</td><td class="reg_status">' + (reg_status == "1" ? "正常" : "已退号") +
    '</td><td>' + reg_pay + '</td><td>' + department + '</td></tr>'
  );
}

/**
 * 点击"刷新"按钮对选中表格行进行刷新
 */
function refreshTrOfChecked() {
   // 判断是否有退号记录选中
   if ($("input[name='refresh_tr']:checked").length === 0) {
    alert("没有选中刷新记录");
    return;
  }
  
  var trChecked = $('input[name="refresh_tr"]:checked').parent().parent(); // 被选择中的单选框所在的tr元素
  $.ajax({
    type: "post",
    url: "getRegister.do",
    data: {
      regIno: trChecked.children(".reg_ino").html()
    },
    dataType: "text",
    error: function () {
      alert("刷新的ajax请求失败");
    },
    success: function (data) {
      var json = eval("(" + data + ")");
      trChecked.children(".diag_status").html((json.diagStatus == "1" ? "否" : "是")); // 更新诊断状态
      trChecked.children(".reg_status").html((json.regStatus == "1" ? "正常" : "已退号")); // 更新挂号状态
    }
  });
}

/**
 * 分页功能
 */
function pageFuntion(page) {
  $.ajax({
    type: "post",
    url: "getRegistList.do",
    data: {
      pagenum: page
    },
    dataType: "text",
    async: false,
    error: function () {
      alert("分页的ajax请求失败");
    },
    success: function (data) {
      console.log(data);
      var json = eval("(" + data + ")"); // string => json
      $(".maxpage").html(json.maxpage);
      $('tbody').empty(); // 清空表格
      // 遍历取值，添加挂号显示表格的行
      for (var i = 0; i < json.lists.length; i++) {
        var arr = json.lists[i];
        addTrIntoTableDesc(arr[0], arr[1], arr[2], arr[3], arr[4], arr[5], arr[6], arr[7], arr[8], arr[9], arr[10], arr[11], arr[12], arr[13]);
      }
    }
  });
}

/**
 * 在网页加载完时，执行相应的函数
 */
$(document).ready(function () {
  // 获得全局变量
  getGlobalVariable();
  // 获得当前可用的最新挂号发票号
  getRegIno();
  // 获得当前可用的最新病例号
  getCaseNo();
  // 获得当期时间
  getNowTime();
  // 动态生成科室选项
  createDeptOption();
  // 默认显示"应收金额"
  regPayInput.val(2);
  // 分页功能
  pageFuntion(1);
  // 绑定事件
  bindEvent();
});